﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ShredTheLog.Common.MVVM;
using ShredTheLog.Api;
using System.ComponentModel.Composition;

namespace ShredTheLog.ViewModels
{
    [Export(typeof(ISettingsPageViewModel))]
    [OrderMetadata(Order = 300)]
    [PartCreationPolicy(CreationPolicy.NonShared)] // Модель должна пересоздаваться, чтобы после закрытия окна настроек по отмене окно настроек при повторном открытии отображало актуальные значения настроек, а не отмененные в ходе предыдущего сеанса
    public sealed class NotificationSettingsPageViewModel : ViewModelBase, ISettingsPageViewModel
    {
        [Import]
        private IShredServices ShredServices { get; set; }

        [ImportMany]
        public INotifierSettingsViewModel[] Settings { get; private set; }

        public string Header { get { return ShredServices.GetLocalizedString("s_Notifications"); } }

        public void Save()
        {
            Settings.ForEach(i => i.Save());
        }
    }

    [Export(typeof(INotifierSettingsViewModel))]
    [PartCreationPolicy(CreationPolicy.NonShared)] // Модель должна пересоздаваться, чтобы после закрытия окна настроек по отмене окно настроек при повторном открытии отображало актуальные значения настроек, а не отмененные в ходе предыдущего сеанса
    public sealed class SoundNotifierSettingsViewModel : ViewModelBase, INotifierSettingsViewModel
    {
        [Import]
        private ISoundNotifierSettings NotifierSettings { get; set; }

        public SoundNotifierSettingsViewModel()
        {
            IsActive = NotifierSettings.IsActive;
            NotifyOnMessagesInActiveChatWindows = NotifierSettings.NotifyOnMessagesInActiveChatWindows;
            NotifyOnPublicChatMessages = NotifierSettings.NotifyOnPublicChatMessages;
        }

        public bool IsActive { get; set; }
        public bool NotifyOnMessagesInActiveChatWindows { get; set; }
        public bool NotifyOnPublicChatMessages { get; set; }

        public void Save()
        {
            NotifierSettings.IsActive = IsActive;
            NotifierSettings.NotifyOnMessagesInActiveChatWindows = NotifyOnMessagesInActiveChatWindows;
            NotifierSettings.NotifyOnPublicChatMessages = NotifyOnPublicChatMessages;
        }
    }

    [Export(typeof(INotifierSettingsViewModel))]
    [PartCreationPolicy(CreationPolicy.NonShared)] // Модель должна пересоздаваться, чтобы после закрытия окна настроек по отмене окно настроек при повторном открытии отображало актуальные значения настроек, а не отмененные в ходе предыдущего сеанса
    public sealed class FlashWindowNotifierSettingsViewModel : ViewModelBase, INotifierSettingsViewModel
    {
        [Import]
        private IFlashWindowNotifierSettings NotifierSettings { get; set; }

        public FlashWindowNotifierSettingsViewModel()
        {
            IsActive = NotifierSettings.IsActive;
            NotifyOnMessagesInActiveChatWindows = NotifierSettings.NotifyOnMessagesInActiveChatWindows;
            NotifyOnPublicChatMessages = NotifierSettings.NotifyOnPublicChatMessages;
        }

        public bool IsActive { get; set; }
        public bool NotifyOnMessagesInActiveChatWindows { get; set; }
        public bool NotifyOnPublicChatMessages { get; set; }

        public void Save()
        {
            NotifierSettings.IsActive = IsActive;
            NotifierSettings.NotifyOnMessagesInActiveChatWindows = NotifyOnMessagesInActiveChatWindows;
            NotifierSettings.NotifyOnPublicChatMessages = NotifyOnPublicChatMessages;
        }
    }

    [Export(typeof(INotifierSettingsViewModel))]
    [PartCreationPolicy(CreationPolicy.NonShared)] // Модель должна пересоздаваться, чтобы после закрытия окна настроек по отмене окно настроек при повторном открытии отображало актуальные значения настроек, а не отмененные в ходе предыдущего сеанса
    public sealed class BalloonTipNotifierSettingsViewModel : ViewModelBase, INotifierSettingsViewModel
    {
        [Import]
        private IBalloonTipNotifierSettings NotifierSettings { get; set; }

        public BalloonTipNotifierSettingsViewModel()
        {
            IsActive = NotifierSettings.IsActive;
            NotifyOnMessagesInActiveChatWindows = NotifierSettings.NotifyOnMessagesInActiveChatWindows;
            NotifyOnPublicChatMessages = NotifierSettings.NotifyOnPublicChatMessages;
        }

        public bool IsActive { get; set; }
        public bool NotifyOnMessagesInActiveChatWindows { get; set; }
        public bool NotifyOnPublicChatMessages { get; set; }

        public void Save()
        {
            NotifierSettings.IsActive = IsActive;
            NotifierSettings.NotifyOnMessagesInActiveChatWindows = NotifyOnMessagesInActiveChatWindows;
            NotifierSettings.NotifyOnPublicChatMessages = NotifyOnPublicChatMessages;
        }
    }
}
